#!/usr/bin/python3
# -*- coding: utf-8 -*-

import re

import allure
from playwright.sync_api import Page


class Toolbar:
    def __init__(self, page: Page):
        self.page = page

    @allure.step("工具栏：点击[刷新]按钮")
    def refresh_button(self):
        """刷新按钮"""
        self.page.get_by_role("link", name="G", exact=True).click()

    @allure.step("工具栏：点击[创建]按钮")
    def create_button(self):
        """创建按钮"""
        self.page.click("css=.table-toolbar > .btn-primary")

    @allure.step("工具栏：点击[创建 VPC 网络]")
    def click_create_router_button(self):
        self.page.locator("a").filter(has_text=re.compile(f"^创建 VPC 网络$")).click()

    @allure.step("工具栏：点击[立即提交]")
    def click_submit_now_button_by_role_button(self):
        self.page.get_by_role("button", name="立即提交").click()

    @allure.step("工具栏：点击[申请]按钮")
    def click_allocate_button(self):
        """分配EIP按钮"""
        self.page.locator("a").filter(has_text="申请").click()

    @allure.step("工具栏：点击[复制]按钮")
    def copy_button(self):
        """复制按钮"""
        self.page.locator("a").filter(has_text="复制").click()

    @allure.step("工具栏：点击[更多操作]按钮")
    def more_operations_button(self):
        """更多操作"""
        self.page.locator("div").filter(has_text=re.compile(r"^更多操作")).get_by_role(
            "textbox"
        ).click()

    @allure.step("工具栏：点击[更多操作]->下拉菜单 按钮")
    def more_operations_button_to_delete(self, operation=""):
        """更多操作中的按钮"""
        self.page.locator("a").filter(has_text=re.compile(rf"^{operation}$")).click()

    @allure.step("工具栏：点击[搜索]按钮")
    def search_input(self, text=""):
        """搜索框"""
        self.page.locator('.table-toolbar > .form-search > input[type="search"]').type(
            text
        )

    @allure.step("工具栏：点击[标签]按钮")
    def tag_button(self):
        """标签按钮"""
        self.page.locator(".table-toolbar > .tags-filter > .filter").click()

    @allure.step("工具栏：点击[设置分页]按钮")
    def set_page_num(self, num: int = 20):
        """
        分页
        :param num: 设置分页显示的数量
        """
        self.page.get_by_role("combobox").select_option(str(num))

    @allure.step("工具栏：点击[详细视图]按钮")
    def detail_view(self):
        """详细视图"""
        self.page.get_by_text("详细", exact=True).click()

    @allure.step("工具栏：点击[监控视图]按钮")
    def monitoring_view(self):
        self.page.get_by_text("监控", exact=True).click()

    @allure.step("工具栏：点击[目录视图]按钮")
    def catalog_view(self):
        """目录视图"""
        self.page.get_by_text("目录", exact=True).click()

    @allure.step("工具栏：点击[加载到云服务器]按钮")
    def load_to_instance(self):
        """加载到云服务器"""
        self.page.locator("a").filter(has_text="加载到云服务器").click()

    @allure.step("工具栏：点击[删除]按钮")
    def delete(self):
        """删除"""
        self.page.locator("a").filter(has_text="删除").click()

    @allure.step("工具栏：点击[申请]按钮")
    def apply_for(self):
        """申请"""
        self.page.locator("a").filter(has_text="申请").click()

    @allure.step("工具栏：点击[上一页]按钮")
    def last_page(self):
        """上一页"""
        self.page.locator(".right > a").first.click()

    @allure.step("工具栏：点击[下一页]按钮")
    def next_page(self):
        """下一页"""
        self.page.locator(".right > a:nth-child(3)").click()

    @allure.step("工具栏：点击[应用到负载均衡器监听器]按钮")
    def apply_lb_listener(self):
        """应用到负载均衡器监听器"""
        self.page.locator("a").filter(has_text="应用到负载均衡监听器").first.click()

    @allure.step("工具栏：点击[离开VPC网络]按钮")
    def click_leave_router_button(self):
        """点击离开VPC网络按钮"""
        self.page.locator("a").filter(has_text="离开 VPC 网络").click()

    @allure.step("工具栏：点击[加入VPC网络]按钮")
    def click_join_router_button(self):
        """点击离开VPC网络按钮"""
        self.page.locator("a").filter(has_text="加入 VPC 网络").click()

    @allure.step("工具栏：点击[添加云服务器]按钮")
    def click_add_to_instance_button(self):
        """点击添加云服务器按钮"""
        self.page.locator("a").filter(has_text="添加云服务器").click()

    @allure.step("工具栏：点击[升级为多可用区部署]按钮")
    def click_upgrade_to_multi_az_deploy_button(self):
        """点击升级为多可用区部署按钮"""
        self.page.locator("a").filter(has_text="升级为多可用区部署").click()

    @allure.step("工具栏：点击[绑定标签]按钮")
    def click_binding_tag_button(self):
        """点击绑定标签按钮"""
        self.page.locator("a").filter(has_text="绑定标签").click()

    @allure.step("工具栏：点击[从项目中移除]按钮")
    def click_remove_from_the_project_button(self):
        """点击从项目中移除按钮"""
        self.page.locator("a").filter(has_text="从项目中移除").click()